home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 32
/
Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso
/
Aminet
/
text
/
edit
/
Skriptmanagr14.lha
/
Skriptmanager1.4
/
Spell.DAT
(
.txt
)
< prev
Wrap
CanDo Variables/Data
|
1999-05-17
|
45KB
|
2,036 lines
@CDVRANNO
CanDoVar Ver1
GUIDE
LINKNAME
TRACE(Option)
LINKROUTE
TRACE(Option)L
LINKKOMMENTAR
LINKTEXT
Ram Disk:LLL/TRACE(Option)L.txt
LINKNAME
SYMBOL(Name)
LINKROUTE
SYMBOL(Name)L
LINKKOMMENTAR
LINKTEXT
Ram Disk:LLL/SYMBOL(Name)L.txt
LINKNAME
SOURCELINE([Zeile])
LINKROUTE
SOURCELINE([Zeile])L
LINKKOMMENTAR
LINKTEXT
%Ram Disk:LLL/SOURCELINE([Zeile])L.txt
LINKNAME
REMLIB()
LINKROUTE
REMLIB()L
LINKKOMMENTAR
LINKTEXT
Ram Disk:LLL/REMLIB()L.txt
LINKNAME
IMPORT(Adresse[,L
nge])
LINKROUTE
IMPORT(Adresse[,L
LINKKOMMENTAR
LINKTEXT
&Ram Disk:LLL/IMPORT(Adresse[,L
ngL.txt
LINKNAME
GETSPACE(L
LINKROUTE
GETSPACE(L
nge)L
LINKKOMMENTAR
LINKTEXT
!Ram Disk:LLL/GETSPACE(L
nge)L.txt
LINKNAME
FREESPACE([Addresse,L
nge])
LINKROUTE
FREESPACE([Addresse,L
LINKKOMMENTAR
LINKTEXT
&Ram Disk:LLL/FREESPACE([Addresse,L.txt
LINKNAME
DATE(Option[,Datum,I|S])
LINKROUTE
DATE(Option[,Datum,IL
LINKKOMMENTAR
LINKTEXT
&Ram Disk:LLL/DATE(Option[,Datum,IL.txt
LINKNAME
SELECT
LINKROUTE
SELECT L
LINKKOMMENTAR
LINKTEXT
Ram Disk:LLL/SELECT L.txt
LINKNAME
LINKROUTE
EXITL
LINKKOMMENTAR
LINKTEXT
Ram Disk:LLL/EXITL.txt
LINKTEXT
!Ram:LLL/BITXOR(BitStr1[,BitSL.txt
LINKKOMMENTAR
LINKROUTE
BITXOR(BitStr1[,BitSL
LINKNAME
%BITXOR(BitStr1[,BitStr2,F
llzeichen])
LINKTEXT
Ram:LLL/ABS(Zahl)L.txt
LINKKOMMENTAR
LINKROUTE
ABS(Zahl)L
LINKNAME
ABS(Zahl)
GUIDE
LINKTEXT
|Operatoren sind einfach die
Zeichen, die zwei Variablen oder
sonstige Ausdr
cke auf irgendeine
Art verkn
pfen.
Also z.B. ein simples +.
Das Problem ist nur: Wie sollen
diese Operatoren abgearbeitet
werden, wenn mehrere in einem
Ausdruck vorhanden sind? Aus
Mathe kennst man sicher noch
"Punkt vor Strich":
Erst mal und geteilt durch, dann
plus und minus. In ARexx gibt es
eine ganze Priorit
tenliste der
Operatoren, und auch hier gibt es
welche, die wie Plus und Minus
die gleiche Priorit
t haben.
Diese Liste sieht folgenderma
Operator Pri. Beschreibung
~ 8 logisches "nicht"
+ 8 als Pr
fix zur
Konvertierung
- 8 Pr
** 7 Potenzierung
2**6 meint "2
hoch 6"
* 6 Multiplikation
% 6 ganzzahlige
Division
/ 6 Division
// 6 Rest der Division
- 5 Subtraktion
+ 5 Addition
Le 4 Verkettung mit
Leerzeichen
|| 4 direkte
Verkettung
~= 3 absolut ungleich
== 3 absolut gleich
~= 3 ungleich
= 3 gleich
>= 3 gr
er/gleich
> 3 gr
<= 3 kleiner/gleich
< 3 kleiner
& 2 logisches UND
| 1 logisches ODER
&& 1 logisches exklu-
siv ODER
Ich denke, es sollte kein Prob-
lem sein, diese Liste anzuwenden.
Hervorzugheben ist vielleicht
noch, da
es gleich extra
Operatoren f
r eine ganzzahlige
Division gibt, ebenso wie f
r den
Rest bei einer solchen Operation.
Operatoren
LINKNAME
Operatoren
GUIDE
LINKTEXT
Ist die Kurzform von
PARSE UPPER ARG und dient zum
Zerlegen eines
bergabestrings
in mehrere Teile.
Ein weiterer Befehl, der dem
Arg Befehl von der Schreibweise
des Wortes gleicht, ist Arg().
Lediglich die Klammern verhelfen
diesem Befehl zu einem anderen
Ergebnis:
Arg(nummer,E|O)
Gibt die Anzahl der
bergebenen
Argumente zur
E pr
ft, ob ein Argument
existiert
O pr
ft, ob ein Argument
ausgelassen wurde
LINKNAME
Arg [maske] [,maske]
LINKTEXT
`Schlie
t die Datei mit dem
logischen Dateinamen.
Diese Datei wurde vorher mit
open() ge
ffnet.
CLOSE
LINKNAME
Close(datei)
LINKTEXT
~Gibt einen Wert (String oder
Zahl) in einem Fenster aus.
Der Befehl SAY() bewirkt noch
tzlich einen Zeilenvorschub
dazu.
LINKNAME
Echo [ausdruck]
LINKTEXT
Testet ob eine Datei bereits das
Datei-Ende erreicht hat.
Bei Benutzen von Schleifen ist
diese Funktion
erst brauch-
FF=Open(test,"Ram:T/skript","R")
DO While ~EOF(test)
RR=ReadLN(test)
echo RR||" Nicht Am Ende"
LINKNAME
Eof(datei)
LINKTEXT
ft die Existens einer Datei
oder deren Verzeichnis.
IF exists("T:skript")
echo existiert
test="T:skript"
IF exists(test)
echo "existiert"
EXISTS
LINKNAME
Exists(datei)
LINKTEXT
SKurzform von PARSE UPPER PULL
und liest Strings aus einem
Eingabefenster (STDIN).
LINKNAME
Pull(Eingabe)
LINKTEXT
mDie Zeilen z
hlen.
Gibt die Zeilen zur
ck, die im
Eingabepuffer stehen;
ohne Angabe eines Namens die
Anzahl der Zeilen, die in STDIN
stehen.
Unter Umst
nden kann es nat
rlich
auch sinnvoll sein, den Zeiger
auf ein anderes Zeichen innerhalb
der Datei zu verschieben.
Das geht zeichenweise vor sich,
man sollte also genau wissen,
wie die Datei aufgebaut ist.
LINES
LINKNAME
Ergebnis=LINES(name)
LINKTEXT
ffnet eine reale Datei unter
dem logischen Namen logisch
zum Lesen,
berschreiben oder
ngen. Spezielle logische
Dateien sind STDOUT o. STDIN.
Erfolg=OPEN(Test,"Text:Golded/
Amigaaktuell/ARexx-Kurs/03.txt"
,"R")
ffnet diesen Text zum Lesen (R)
und weist der Variable Erfolg
den Wert 1 zu, wenn die Operation
Erfolg hatte, und 0, wenn ein
Fehler aufgetreten ist
(z.B., weil ich eine Verzeich-
nisebene ausgelassen habe... :).
Die Datei kann jetzt unter dem
Namen Test mit anderen Befehlen
angesprochen werden. Das ist der
sogenannte logische Dateiname.
Es gibt folgende Optionen:
R (Read) - Lesen
W (Write) - Schreiben
(Achtung: Eine evtl. vorhandene
Datei wird
berschrieben) gel
scht!)
A (Append) - Anh
Statt einer Datei kann man mit
OPEN() auch ein AmigaDos-Device
ffnen, z.B. ein Konsolenfenster
(s.u., RAW:).
Beispiel:
/* Hello World Version 1.5.*/
Erfolg=OPEN(Fenster,'CON:20/20
/620/100/Hello World 1.5./CLOSE'
IF ~Erfolg THEN ECHO "Fehler!"
DO WHILE Eingabe~="Ende"
Erfolg=WRITELN(Fenster,"Gib
was ein!")
Eingabe=READLN(Fenster)
Erfolg=WRITELN(Fenster,"Du hast
"||Eingabe||" eingegeben.")
-------------------------------
Es reicht auch, einfach nur CON:
einzugeben. Dann kannst man
allerdings Position und Titel
des Fensters nicht beeinflussen.
Im Unterschied zu CON: gibt RAW:
-was bedeutet-
jeden Tastendruck sofort weiter.
Es mu
nicht erst die Return-
Taste gedr
ckt werden.
Auf diese Weise kann man auch
abfragen, ob eine bestimmte
Taste gedr
ckt wurde.
LINKNAME
Erfolg=OPEN(logisch,real,R|W|A)
LINKTEXT
Ein oder mehrere Zeichen aus der
Datei lesen:
Vorsicht! Die Funktion wartet,
bis so viele Zeichen wie
angegeben eingetrudelt sind!
READ hei
t Lesen
CH steht f
r Char, d.h.
Zeichen.
LN steht f
r Line, d.h.
Zeile.
READCH
LINKNAME
Zeichen=READCH(name,Anzahl)
LINKTEXT
Eine ganze Zeile (bis zum
chsten Absatzendezeichen)
lesen:
READ hei
t Lesen
CH steht f
r Char, d.h.
Zeichen.
LN steht f
r Line, d.h.
Zeile.
READLN
LINKNAME
Zeile=READLN(name)
LINKNAME
$NeuePosition=SEEK(name,Offset,Modus)
LINKTEXT
HSetzt den Zeiger (Cursor) auf
eine neue Position innerhalb
einer Datei.
Offset bedeutet die Anzahl der
Zeichen, die weitergegangen
werden soll.
Modus kann folgendes sein:
B - Begin
C - Current (momentane Position)
E - End
und besagt, worauf sich der
Offset bezieht.
Vorsicht mit Offsets, die
das Dateiende hinausgehen!
LINKNAME
Ergebnis=WRITECH(datei,string)
WRITECH
LINKTEXT
LSchreibt Zeichen in eine Datei
ohne Zeilenende.
Ergebnis=WRITECH(Test,"Das hier
soll in meine Datei
geschrieben werden")
Also:
Ein oder mehrere Zeichen in eine
Datei schreiben.
Zum besseren Merken:
WRITE hei
t Schreiben
CH steht f
r Char, d.h.
Zeichen.
LN steht f
r Line, d.h.
Zeile.
LINKNAME
Ergebnis=WRITELN(datei,string)
WRITELN
LINKTEXT
cSchreibt eine Zeile in eine
Datei mit Zeilenende (Return)
am Ende der Zeile.
Ergebnis=WRITELN(Test,"Das hier
soll in meine Datei
geschrieben werden")
Am Schlu
wird ein Absatzende-
zeichen angef
Zum besseren Merken:
WRITE hei
t Schreiben
CH steht f
r Char, d.h.
Zeichen.
LN steht f
r Line, d.h.
Zeile.
LINKNAME
Say(ausdruck)
LINKTEXT
Wie ECHO, nur mit Zeilenvorschub
GUIDE
LINKTEXT
Testet, ob Kurz eine Abk
rzung
(abbreviation) von Lang ist.
Optional kann auch noch eine
Anzahl von Zeichen angegeben
werden, bis zu der verglichen
werden soll.
Liefert 0 (falsch) oder 1 (wahr)
ABBREV
LINKNAME
ABBREV(Lang,Kurz,L
LINKTEXT
jLiefert einen String, der die
nge angegebene Zahl von
Zeichen hat.
Optional kann ein F
llzeichen
angegeben werden.
ECHO CENTRE("TesttextTesttext",4)
ECHO CENTRE("TesttextTesttext"
TESTTEXTTESTTEXT
ECHO CENTRE("TesttextTesttext"
,20,".")
..TESTTEXTTESTTEXT..
ECHO CENTRE("TesttextTesttext"
,40,".")
............TESTTEXTTESTTEXT............
CENTER
LINKNAME
CENTER(Text,L
nge,F
llzeichen)
LINKTEXT
Entfernt die in Liste angegebenen
Zeichen aus einer Zeichenkette.
Wird Liste nicht angegeben,
entfernt es alle Leerzeichen.
ECHO COMPRESS("Haeaikgog
Kausgchael","ag")
COMPRESS
LINKNAME
COMPRESS(String[,Liste])
LINKTEXT
Gibt die erste Stelle zur
an der sich die beiden Texte
unterscheiden.
Optional kann angegeben werden,
mit welchem F
llzeichen der
rzere der Texte aufgef
werden soll, wenn die zwei nicht
gleich lang sind.
Voreingestellt sind Leerzeichen.
COMPARE
LINKNAME
"COMPARE(Text1,Text2[,F
llzeichen])
LINKTEXT
RGibt Zeichenkette so oft aus, wie
man will. Nur negativ darf die
Zahl nicht sein.
COPIES
LINKNAME
COPIES(Zeichenkette,Anzahl)
LINKTEXT
Gibt NUM als Ergebnis zur
wenn Zeichenkette eine g
ltige
Zahl ist, ansonsten CHAR.
Wird ein Typ angegeben, dann
kann auf diesen Typ gepr
werden. Ergebnis ist in diesem
Fall 0 oder 1.
Folgende Typen gibt's:
Alphanumeric A-Z, a-z, 0-9
Binary Bin
r-String
Lowercase a-z
Mixed A-Z, a-z
Upper A-Z
Numeric Zahl
Symbol ARexx-Symbol
Whole ganze Zahl
X Hexadezimalstring
DATATYPE
LINKNAME
DATATYPE(Zeichenkette[,Typ])
LINKTEXT
Diese Funktion schneidet von
Zeichenkette alles ab dem Buch-
staben mit der Nummer ab, die in
Pos angegeben ist. Wird L
nge mit
angegeben, so wird ab Pos ein
Teilstring "herausgeschnitten".
DELSTR
LINKNAME
DELSTR(Zeichenkette,Pos[,L
nge])
LINKTEXT
hnlich wie DELSTR, nur geht's
hier um ganze W
rter.
DELWORD
LINKNAME
#DELWORD(Zeichenkette, Pos[,Anzahl])
LINKTEXT
Gibt die Anfangsposition der
Worte in der Zeichenkette zur
0, wenn nicht gefunden.
ECHO FIND("Heiko Kuschel"
, "Kuschel")
LINKNAME
FIND(Zeichenkette,Worte)
LINKTEXT
Sucht nach dem ersten Auftreten
von Muster in Zeichenkette und
gibt die Position aus. 0, wenn
nicht gefunden.
Eine Startposition kann auch
angegeben werden.
Gleichbedeutend damit ist POS().
INDEX() existiert allerdings nur
auf der Amiga-Version von REXX.
INDEX
LINKNAME
"INDEX(Zeichenkette,Muster[,Start])
LINKTEXT
gt den Quellstring ab der
Startposition in den Zielstring
ein.
Wenn eine L
nge angegeben ist,
kann sie auch mit F
llzeichen
erreicht werden.
ECHO INSERT("ARexx-Kurs "
,"Ein ist eine klasse Sache",4)
EIN AREXX-KURS IST EINE KLASSE
SACHE
Vorsicht: Die F
llzeichen werden
an den Quellstring angeh
ECHO INSERT("ARexx-Kurs "
,"Ein ist eine klasse Sache"
,4,30,"!")
EIN AREXX-KURS !!!!!!!!!!!!!!!!!
!!IST EINE KLASSE SACHE
INSERT
LINKNAME
8INSERT(Quellstring,Zielstring[,Start,L
nge,F
llzeichen])
LINKTEXT
(Wie POS() bzw. INDEX(), nur von
hinten.
LASTPOS
LINKNAME
%LASTPOS(Muster, Zeichenkette[,Start])
LINKTEXT
Gibt den linken Teil der Zeichen-
kette zur
ck, abh
ngig von dem
nge stehenden Wert.
Evtl. kann mit F
llzeichen aufge-
llt werden, falls die Zeichen-
kette k
rzer ist als die Zahl,
die in L
nge steht.
LINKNAME
&LEFT(Zeichenkette,L
nge[,F
llzeichen])
LINKNAME
LENGTH(Zeichenkette)
LENGTH
LINKTEXT
!Gibt die L
nge in Zeichen
LINKNAME
/OVERLAY(Quelle, Ziel[,Start,L
nge,F
llzeichen])
OVERLAY
LINKTEXT
Damit wird eine Zeichenkette
ber eine andere gelegt. Im
Gegensatz zu INSERT() geht
dabei ein Teil des Zielstrings
verloren. Das entspricht so
ungef
hr dem
berschreib-Modus
in einem Editor oder einer
Textverarbeitung.
LINKNAME
POS()
LINKTEXT
ist gleichbedeutend mit INDEX()
LINKNAME
REVERSE(Zeichenkette)
REVERSE
LINKTEXT
1Dreht die Zeichenkette um.
Aus ARexx wird xxeRA.
LINKNAME
'RIGHT(Zeichenkette,L
nge[,F
llzeichen])
RIGHT
LINKTEXT
8Wie LEFT(), nur da
der rechte
Teil abgeschnitten wird.
LINKNAME
'SPACE(Zeichenkette, Zahl[,F
llzeichen])
SPACE
LINKTEXT
zDamit k
nnen zwischen einzelnen
rtern im String beliebig viele
Leerzeichen (oder andere
llzeichen) eingef
gt werden.
LINKNAME
#STRIP(Zeichenkette[,B|L|T,Zeichen])
STRIP
LINKTEXT
Leerzeichen entfernen.
Optional k
nnen auch nur die
vorangestellten oder nach-
folgenden (Leer-) Zeichen
entfernt werden.
L steht f
r Leading
(vorangestellte)
T steht f
r Trailing
(nachgestellte)
B steht f
r Both
(beides) und ist voreingestellt.
LINKNAME
.SUBSTR(Zeichenkette,Start[,L
nge,F
llzeichen])
SUBSTR
LINKTEXT
Damit kann ein Teilstring aus
einer Zeichenkette
bernommen
werden, und zwar ab Position
Start, optional mit angegebener
nge und F
llzeichen.
LINKNAME
$SUBWORD(Zeichenkette,Start[,Anzahl])
SUBWORD
LINKTEXT
hnlich wie SUBSTR(), nur mit
ganzen W
rtern.
LINKNAME
/TRANSLATE(Zeichenkette[,rein,raus,F
llzeichen])
TRANSLATE
LINKTEXT
Leider kann dieser Befehl nichts
in andere Sprachen
bersetzen...
aber praktisch kann er trotzdem
sein.
Er vergleicht die in raus
angegebenen Zeichen mit der
Zeichenkette.
Findet er eines, ersetzt er es
durch das Zeichen, das in rein
an gleicher Stelle angegeben ist.
Ist rein daf
r zu kurz, nimmt er
ein Leerzeichen oder das optional
angegebene F
llzeichen. Hmmmh!
Kapiert? Vielleicht einmal ein
Beispiel:
ECHO TRANSLATE("Hioku Kaschil"
,"aeiou","eioua")
HEIKO KUSCHEL
ECHO TRANSLATE("Amiga 1200"
,"60","12")
AMIGA 6000
LINKNAME
TRIM(Zeichenkette)
LINKTEXT
>Entfernt alle nachgestellten
Leerzeichen in der Zeichenkette.
LINKNAME
UPPER(Zeichenkette)
UPPER
LINKTEXT
_Wandelt alles in GROSSBUCHSTABEN
um. Als ob ARexx das nicht
sowieso schon dauernd tun w
rde...
LINKNAME
.VERIFY(Zeichenkette,Liste[,M|N,Startposition])
VERIFY
LINKTEXT
berpr
ft,ob die Zeichenkette
nur Zeichen aus der Liste
Wenn ja, ist das Ergebnis 0,
ansonsten die erste Position,
an der ein fremdes Zeichen
gefunden wurde.
Durch Angabe einer Startposition
r die Suche kann man dann auch
weiter hinten stehende "falsche"
Zeichen finden.
N steht f
r NOMATCH und ist
voreingestellt, d.h., es
wird nach Zeichen gesucht,
die *nicht* vorkommen.
M (MATCH) wird dann nach
Zeichen gesucht, die in
der Zeichenkette vorkommen.
LINKNAME
WORD(Zeichenkette,x)
LINKTEXT
}Gibt das x-te Wort aus der
Zeichenkette aus, oder eine
leere Zeichenkette, wenn so
viele W
rter gar nicht
vorhanden sind.
LINKNAME
WORDINDEX(Zeichenkette,Zahl)
WORDINDEX
LINKTEXT
Gibt die Position in Zeichen aus,
an der das x-te Wort steht.
ECHO WORDINDEX("Das ist ein
kleines Beispiel",4)
Das hei
t: Das vierte Wort
beginnt mit dem 13. Buchstaben.
LINKNAME
WORDLENGTH(Zeichenkette,Zahl)
WORDLENGTH
LINKTEXT
iGibt die L
nge des an Nummer
Zahl stehenden Wortes zur
oder 0, wenn es nicht so viele
rter gibt.
LINKNAME
WORDS(Zeichenkette)
WORDS
LINKTEXT
)Liefert nat
rlich die Anzahl
der W
rter.
LINKNAME
XRANGE([Start,Ende])
XRANGE
LINKTEXT
iLiefert eine Zeichenkette, die
alle ASCII-Codes von Start bis
Ende enth
Voreingestellt ist 0 bis 255.
GUIDE
LINKTEXT
Gibt den absoluten Wert einer
Zahl zur
ck. V
llig unmathema-
tisch ausgedr
ckt: Entfernt das
Minuszeichen vor der Zahl, wenn
eins vorhanden ist.
LINKNAME
ABS(Zahl)
LINKTEXT
DDiese Funktion liefert die
gerade eingestellten Werte
r NUMERIC
DIGITS
LINKNAME
DIGITS()
LINKTEXT
DDiese Funktion liefert die
gerade eingestellten Werte
r NUMERIC
LINKNAME
FROM()
LINKTEXT
DDiese Funktion liefert die
gerade eingestellten Werte
r NUMERIC
LINKNAME
FUZZ()
LINKTEXT
Wie RANDOM(), nur da
der
ckgabewert immer zwischen 0
und 1 liegt. Die Zahl der
Nachkommastellen wird mit
NUMERIC DIGITS bestimmt (s.u.).
RANDU
LINKNAME
RANDU([Startwert])
LINKTEXT
.liefert das Vorzeichen der
Zahl oder 0 f
LINKNAME
SIGN(Zahl)
LINKTEXT
Schneidet die Nachkommastellen
ab (rundet nicht!). Optional
kann eine Anzahl von Nachkomma-
stellen angegeben werden.
Gebraucht wird hier noch der
NUMERIC-Befehl, der zum
besseren Verst
ndnis auf-
gerufen werden sollte.
TRUNC
LINKNAME
TRUNC(Zahl[,Stellen])
LINKTEXT
/ NUMERIC DIGITS Zahl
Stellt ein, wie viele Stellen bei
einer numerischen Operation
signifikant sind (1-14).
Ist die Zahl l
nger, wird die
Exponentialschreibweise
verwendet, z.B. 2.122E+3
NUMERIC FUZZ Zahl
Stellt ein, wie viele Stellen
(von rechts) bei Vergleichs-
operationen *nicht* ber
cksicht-
igt werden sollen.
NUMERIC FORM
(Scientific|Engineering)
Stellt die Form der Exponential-
schreibweise ein. Da gibt es
einen Unterschied zwischen
akademischer und Ingenieurs-
schreibweise, der mir allerdings
nicht klar ist.
NUMERIC
LINKNAME
NUMERIC DIGITS Zahl
LINKTEXT
Bergibt eine UND-Verkn
pfung der
Bit-Strings. Die Funktion arbeitet
nicht korrekt, wenn die Strings
unterschiedlich lang sind, da
dann mit Leerzeichen aufgef
wird! Dann mu
das richtige
llzeichen gew
hlt werden, was
auch nicht ganz problemlos ist.
ECHO C2B(BITAND("01010001"b
,"11101110"b))
01000000
Was bedeutet UND-, ODER- etc.
Verkn
pfung?
Ganz einfach: zwei Bits
(also einzelne Speicherstellen)
werden miteinander verglichen,
und abh
ngig von ihrem Zustand
(0 oder 1) kommt es zu einem
Ergebnis.
Das geht nach folgender Tabelle:
Bit 1 | 0 1 0 1 |Vergleich
Bit 2 | 0 0 1 1 |
______|____________|_________
UND | 0 0 0 1 |Ergebnis
ODER | 0 1 1 1 |
XODER | 0 1 1 0 |
rzahlen werden in ARexx
folgenderma
en geschrieben:
"00010000"b
Leerzeichen d
rfen nur an
den Byte-Grenzen eingef
werden!
BITAND
LINKNAME
%BITAND(BitStr1[,BitStr2,F
llzeichen])
LINKTEXT
Invertiert das Bit an der
angegebenen Stelle.
hlt werden die Bits von
rechts nach links!
rzahlen werden in ARexx
folgenderma
en geschrieben:
"00010000"b
Leerzeichen d
rfen nur an
den Byte-Grenzen eingef
werden!
BITCHG
LINKNAME
BITCHG(BitString,Bit)
LINKTEXT
scht das angegebene Bit.
rzahlen werden in ARexx
folgenderma
en geschrieben:
"00010000"b
Leerzeichen d
rfen nur an
den Byte-Grenzen eingef
werden!
BITCLR
LINKNAME
BITCLR(BitString,Bit)
LINKTEXT
kVergleicht die beiden Bitstrings
und liefert 0, wenn sie gleich
sind,ansonsten die erste Position,
an der sie sich unterscheiden.
Sind die Strings nicht gleich
lang, wird der k
rzere am linken
Ende mit F
llzeichen
aufgef
rzahlen werden in ARexx
folgenderma
en geschrieben:
"00010000"b
Leerzeichen d
rfen nur an
den Byte-Grenzen eingef
werden!
BITCOMP
LINKNAME
&BITCOMP(BitStr1,Bitstr2[,F
llzeichen])
LINKTEXT
ergibt eine ODER-Verkn
pfung der
Bit-Strings.
Ansonsten wie bei BITAND().
rzahlen werden in ARexx
folgenderma
en geschrieben:
"00010000"b
Leerzeichen d
rfen nur an
den Byte-Grenzen eingef
werden!
BITOR
LINKNAME
$BITOR(BitStr1[,BitStr2,F
llzeichen])
LINKTEXT
Setzt das angegebene Bit auf 1.
rzahlen werden in ARexx
folgenderma
en geschrieben:
"00010000"b
Leerzeichen d
rfen nur an
den Byte-Grenzen eingef
werden!
BITSET
LINKNAME
BITSET(BitString,Bit)
LINKTEXT
Testet, ob das angegebene Bit
gesetzt ist.
Liefert 1, wenn ja, sonst 0.
rzahlen werden in ARexx
folgenderma
en geschrieben:
"00010000"b
Leerzeichen d
rfen nur an
den Byte-Grenzen eingef
werden!
BITTST
LINKNAME
BITTST(BitString,Bit)
LINKTEXT
ergibt eine Exklusiv-ODER-
Verkn
pfung der Bit-Strings.
Ansonsten wie bei BITAND().
rzahlen werden in ARexx
folgenderma
en geschrieben:
"00010000"b
Leerzeichen d
rfen nur an
den Byte-Grenzen eingef
werden!
BITXOR
LINKNAME
%BITXOR(BitStr1[,BitStr2,F
llzeichen])
LINKTEXT
Allgemeinerkl
rung zum Konver-
tieren!
Zahlen in Zeichenketten
verwandeln usw.
r gibt es in ARexx ein sehr
einfaches System von Funktionen:
Jede "Art" von Zeichen hat einen
Buchstaben:
B - Bin
C - Character (Buchstaben)
D - Dezimal
X - hexadezimal
... und "2" steht im Englischen
manchmal f
r "to", weil's genauso
ausgesprochen wird.
Also:
ECHO B2C("00100010 01101001")
Gibt die Zeichen aus, die im
ASCII-Code den hier angegebenen
rzahlen entsprechen.
LINKNAME
B2C()
LINKTEXT
siehe unter B2C()
LINKNAME
C2B()
LINKTEXT
siehe unter B2C()
Bei C2D darf die Zeichenkette,
bergeben wird, maximal 4
Zeichen enthalten.
Sie darf auch ein Hex-String,
z.B. "FFFF"x oder ein Bin
string, z.B. "0011"b sein.
Optional kann bei C2D() ein
Argument angegeben werden:
C2D("FFFF"x,2)
In diesem Fall wird der Bin
rwert
der Zeichenkette als Zweier-
komplement von 2 Bytes L
behandelt. So kann man auch
vorzeichenbehaftete Zahlen
erzeugen.
LINKNAME
C2D()
LINKTEXT
siehe unter B2C()
LINKNAME
C2X()
LINKTEXT
siehe unter B2C()
Bei D2C kann ebenfalls ein
tzlicher Wert angegeben
werden. Er bewirkt, da
das
Ergebnis die entsprechende
nge hat und entweder links
abgeschnitten oder mit "00"x
aufgef
llt wird.
LINKNAME
D2C(Zahl[,Bytes])
LINKTEXT
siehe unter B2C()
Bei D2X() und X2D() kann die
Zahl von Nibbles (4 Bits, also
2 Nibbles= 1 Byte) angegeben
werden, damit auch negative
Zahlen dargestellt werden k
nnen.
ECHO X2D("FFE0",4)
ECHO X2D("FFE0",6)
65504
ECHO X2D("FFE0")
65504
LINKNAME
D2X()
LINKTEXT
siehe unter B2C()
LINKNAME
X2C()
LINKTEXT
siehe unter B2C()
Bei D2X() und X2D() kann die
Zahl von Nibbles (4 Bits, also
2 Nibbles= 1 Byte) angegeben
werden, damit auch negative
Zahlen dargestellt werden k
nnen.
ECHO X2D("FFE0",4)
ECHO X2D("FFE0",6)
65504
ECHO X2D("FFE0")
65504
LINKNAME
X2D()
LINKTEXT
Liefert eine Zufallszahl, option-
al kann eine kleinste und gr
Zahl angegeben werden. Als vorein-
gestellter Startwert wird die Sys-
temzeit verwendet.
Wenn man immer die gleiche Abfol-
ge von Zufallszahlen haben will,
ist ein Startwert anzugeben, der
statt der Systemzeit verwendet
wird.
Anmerkung: Zufallszahlen zu er-
zeugen, ist mit einem Computer
praktisch unm
glich. Denn ein
Computer arbeitet mit mathema-
tischen Formeln, und deren Er-
gebnis ist immer gleich.
Deshalb nimmt man eine Formel,
bei der die n
chste Zahl nicht
so ohne weiteres vorhersehbar
ist und bei der die Ergebnisse
halbwegs gleichm
ber alle
Zahlen verteilt sind, und f
ttert
sie mit einem Startwert, der weit-
gehend zuf
llig ist,n
mlich der
Systemzeit zum Zeitpunkt des
ersten Aufrufs dieser Funktion.
Wird dagegen immer der gleiche
Startwert genommen, kommt auch
immer die gleiche Folge von
Zahlen heraus. Auch das kann
tzlich sein, wenn man einen
immer gleichen Ablauf haben will.
RANDOM
LINKNAME
RANDOM([MIN,MAX,STARTWERT])
GUIDE
LINKTEXT
Siehe unter IF
LINKNAME
LINKTEXT
WHILE...END
DO WHILE Eingabe ~="Ende"
Durchl
uft die Schleife,
solange die Variable Eingabe
nicht den Wert Ende erh
Die Tilde ist das Negations-
zeichen in ARexx.
~= bedeutet also so viel wie
"nicht gleich".
WHILE
LINKNAME
WHILE...END
LINKTEXT
lUNTIL...END
DO UNTIL Eingabe="Ende"
Durchl
uft die Schleife, bis
die Variable Eingabe den Wert
Ende erh
UNTIL
LINKNAME
UNTIL...END
LINKTEXT
~Mit LEAVE kann die Schleife
vorzeitig verlassen werden.
Besonders wichtig bei DO FOREVER
... unter IF gibt es ein
Beispiel.
LEAVE
LINKNAME
LEAVE
LINKTEXT
Siehe unter IF
LINKNAME
LINKTEXT
)IF... THEN (...ELSE)
Bedingungsabfrage per IF!
Eine M
glichkeit, Schleifen zu
programmieren mittels
DO FOREVER:
Um hier eine Abfrage machen zu
nnen, braucht man einen Befehl,
der ARexx etwas in der Art mit-
teilen k
nnen:
"Wenn Eingabe gleich "Ende" ist,
dann verlasse bitte die Schleife.
Und wenn nicht, dann gib die
Eingabe aus."
Dieser Befehl hei
t sinnvoller-
weise IF... THEN (...ELSE)
Nach dem THEN darf allerdings
nur ein einziger Befehl stehen!
Wie soll man das anstellen?
Oft genug mu
nach so einer Ab-
frage doch eine ganze Menge im
Programm geregelt werden.
Ganz einfach:
"Der Abschnitt zwischen DO
und END wird intern wie ein
einziger Befehl behandelt."
Also:
Wenn nach dem THEN mehrere
Befehle folgen sollen, mu
dem ersten Befehl ein DO und
nach dem letzten dieser Befehle
ein END stehen.
DO FOREVER
ECHO "Gib Ende f
r Quit ein"
PARSE PULL Eingabe
IF Eingabe="Ende" THEN DO
ECHO "Die Eingabe war
richtig "||Eingabe
LEAVE
END
ELSE DO
ECHO "Die Eingabe war
falsch "||Eingabe
END
LINKNAME
IF... THEN (...ELSE)
LINKTEXT
FOREVER...END
DO FOREVER ist, denke ich,
ziemlich klar...
Die Schleife l
uft bis unendlich
und kann mittels LEAVE
abgebrochen werden.
Unter IF gibt es ein Beispiel!
FOREVER
LINKNAME
FOREVER...END
LINKTEXT
cDO...END
Wiederholung eines oder meherer
Befehls-e in der Do...End
Struktur (Schleife).
DO steht jeweils am Anfang einer
Gruppe von Befehlen, END am Ende,
wie der Name schon sagt.
Dabei kann DO noch eine ganze
Reihe von Bedingungen mitgegeben
werden. Das sieht dann folgender-
en aus:
DO (Bedingungen)
ARexx-Befehle
Dieser Abschnitt zwischen DO
und END wird intern wie ein
einziger Befehl behandelt.
Folgende Bedingungen k
nnen
dem Befehl DO mitgegeben werden
(es ist jedesmal gleich ein
Beispiel dazugenommen):
DO Zaehler=1 TO 10 BY 2 FOR 3
Die Variable Zaehler wird auf
den Wert 1 gesetzt und die
Schleife durchlaufen.
Am Ende wird sie um 2 erh
und die Schleife erneut durch-
laufen, usw., bis der Wert 10
erreicht ist. Mit FOR kann die
maximale Anzahl der Durchl
festgelegt werden, auch wenn
der Endwert noch nicht erreicht
LINKNAME
DO...End
LINKTEXT
Gibt den Inhalt einer Variablen
ck. Das ist dann n
tig, wenn
der Variablenname selbst eine
Variable ist:
a="Hoppla, ist das kompliziert"
b="a"
SAY VALUE(a)
SAY VALUE("a")
SAY VALUE(b)
VALUE
LINKNAME
VALUE(Name)
LINKTEXT
[Gibt die aktuelle Trace-Einstel-
lung zur
ck oder
ndert je nach
Option diese Einstellung.
TRACE
LINKNAME
TRACE(Option)
LINKTEXT
hnlich wie DATE(), nur f
r die
Uhrzeit. Folgende Optionen gibt
Civil [h]h:mmxx (xx meint am
oder pm)
Elapsed Sekunden und Hundert-
stelsekunden seit der
letzten Abfrage
Hours Stunden seit Mitter-
nacht
Minutes Minuten seit Mitter-
nacht
Normal hh:mm:ss
Reset wie Elapsed, l
scht
aber danach den Timer.
Seconds Sekunden seit Mitter-
nacht
LINKNAME
TIME([Option])
LINKTEXT
Damit kann getestet werden, ob
es sich bei Name um ein g
ltiges
ARexx-Symbol (z.B. eine Variable)
handelt. Folgende R
ckgabewerte
sind m
glich:
BAD war nichts: kein ARexx-
Symbol.
LIT es handelt sich um ein
uninitialisiertes Symbol
(eine Variable, der noch
kein Wert zugewiesen
wurde).
VAR Eine Variable, der ein
Wert zugewiesen wurde.
SYMBOL
LINKNAME
SYMBOL(Name)
LINKTEXT
Schreibt den angegebenen String
direkt in den Speicher. Ganz
ohne Parameter
bergibt die
Funktion den freien System-
speicher.
STORAGE
LINKNAME
,STORAGE(Addresse[,String,L
nge,F
llzeichen])
LINKTEXT
Liefert ohne Wertangabe die Zahl
aller Zeilen im aktuellen Skript.
Mit Angabe einer Nummer liefert
es einen String, in dem die Zeile
mit der entsprechenden Nummer
steht.
SOURCELINE
LINKNAME
SOURCELINE([Zeile])
LINKTEXT
Setzt einen Eintrag in der
Clipliste. Ohne Angabe eines
Wertes wird der Eintrag
scht. Der R
ckgabewert ist
boolsch (0 oder 1).
SETCLIP
LINKNAME
SETCLIP(Name[,Wert])
LINKTEXT
Entfernt eine Library wieder.
REMLIB
LINKNAME
REMLIB()
LINKTEXT
SDamit kann man einige Einstel-
lungen des Programms ver
ndern
bzw. abfragen.
Folgende Optionen sind m
glich
(es reicht wieder die Angabe
des ersten Buchstabens):
Directory gibt das aktuelle
Verzeichnis des
Programms zur
ID Zeiger auf die
TaskControlBlock-
Struktur
Priority Damit kann dem
Proze
eine andere
TaskPriority gegeben
werden.
Vorsicht: REXXMAST
hat 4! Nicht h
gehen!
Werte zwischen -128
und 127 sind
theoretisch m
glich,
normal ist der
Bereich von etwa -5
bis +3.
Window Damit kann der
WindowPointer des
Tasks ver
ndert
werden. F
r "Wert"
k
nnen die
Schl
sselworte "Null"
oder "Workbench"
stehen.
* Der in Wert
angegebene logische
Name wird als
aktueller *-
Console-Handler
eingestellt.
PRAGMA
LINKNAME
PRAGMA(Option[,Wert])
LINKTEXT
gLiest Daten aus einem Speicher-
bereich. Ohne Angabe einer L
wird bis zum n
chsten "00"x ge-
lesen.
IMPORT
LINKNAME
IMPORT(Adresse[,L
nge])
LINKTEXT
Gibt den Hashwert des
bergebenen
Strings zur
Das ist so eine Art Pr
fsumme:
Alle ASCII-Werte werden addiert,
und das unterste Byte der Summe
ckgegeben.
LINKNAME
HASH(String)
LINKTEXT
;Gibt einen Zeiger auf einen
freien Speicherbereich zur
GETSPACE
LINKNAME
GETSPACE(L
LINKTEXT
*Liest eine Zeichenkette aus dem
Clipboard.
GETCLIP
LINKNAME
GETCLIP(Name)
LINKTEXT
wGibt die mit GETSPACE reservier-
ten Speicherbereiche wieder frei.
Bei Verwendung der Argumente
arbeitet die Funktion nicht ganz
fehlerfrei. Sie wird am Ende des
Programms sowieso ausgef
hrt,
also vielleicht einfach weglassen
wenn nicht gerade 180 MB Speicher
reserviert wurden. Und wenn, dann
besser ohne die Argumente, denn
FREESPACE wei
, welcher Speicher
ihm geh
FREESPACE
LINKNAME
FREESPACE([Addresse,L
nge])
LINKTEXT
Hiermit kann der Inhalt eines
Strings an eine 4-Byte-Adresse
geschrieben werden.
Der Speicher mu
vorher reser-
viert werden!
(Siehe GETSPACE)
EXPORT
LINKNAME
+Export(Addresse[,String,L
nge,F
llzeichen])
LINKTEXT
WGibt eine kurze Beschreibung zu
jeder Fehlernummer aus, die in
ARexx auftreten kann.
ERRORTEXT
LINKNAME
ERRORTEXT()
LINKTEXT
}Gibt die aktuelle Zeit als
Zeichenkette zur
Diese kann weitgehend durch Op-
tionen ver
ndert werden.
Diese M
glichkeiten gibt es,
wobei T f
r Tag, M f
r Monat
und J f
r Jahr steht:
Century Tage seit Beginn
des Jahrhunderts
Days Tage seit Beginn
des Jahres
European TT/MM/JJ
Internal Systemtage (seit
dem 1.1.1978)
Julian JJTTT (Tage seit
Beginn des Jahres)
Month englischer Monats-
name
Normal TT MMM JJJJ
Ordered JJ/MM/TT
Sorted JJJJMMTT
USA MM/TT/JJ
Weekday der Wochentag
Es reicht jeweils der erste
Buchstabe als Angabe.
Durch Angabe des I oder S
kann ein Datum, das im
Internal- oder Sorted-
Format vorliegt, in jedes
beliebige andere umgewandelt
werden:
SAY DATE("E",19960428,"S")
FOLGENDES BEISPIEL STAMMT VON
HEIKO KUSCHEL:
Ein kleines Programm, das ich
einmal t
glich automatisch auf-
rufen lie
und das mir den akt-
uellen Stand meiner Hausarbeit
auf die Diskette Hausarbeit_BAK:
kopierte, und zwar jedesmal in
ein neues Verzeichnis, das als
Namen das aktuelle Datum hatte:
--------------------------------
/*Sicherheitskopie f
Hausarbeit*/
Address Command
Datum=DATE("Sorted")
makedir "Hausarbeit_BAK:"Datum
copy "Text:BT-III/Texte/(Hausar
beit|Literaturverzeichnis).TXT
Hausarbeit_BAK:"Datum
--------------------------------
LINKNAME
DATE(Option[,Datum,I|S])
LINKTEXT
Hiermit lassen sich externe
Bibliotheken (Libraries) in
ARexx einbinden, die weitere
Befehle zur Verf
gung stellen.
Solche Bibliotheken befinden
sich normalerweise im Verzeich-
nis LIBS: und haben die Endung
.library.
r ARexx sind leider meistens
spezielle Abwandlungen dieser
Libraries n
tig.
Im Aminet gibt es aber eine ganze
Reihe sehr guter Libraries, z.B.
rexxtricks.library,
rexxsupport.library,
rexxreqtools.library
und andere.
Wie diese im einzelnen arbeiten,
kann ich hier kaum erkl
ren,
das w
rde zu weit f
hren.
Die Befehle, die die Libraries
zur Verf
gung stellen, sind
normalerweise gut dokumentiert.
ARexx schaut dann bei Befehlen,
die unbekannt sind, zun
chst
einmal in den angemeldeten
Bibliotheken nach, ob dort der
entsprechende Befehl zu finden
ist. Erst dann wird versucht,
ber den ARexx-Port ein Prog-
ramm zu finden, das diesen Be-
fehl versteht.
Die Priorit
t gibt an, in welcher
Reihenfolge in den Bibliotheken
gesucht werden soll.
Hoher Wert meint zuerst suchen.
ltig sind Werte zwischen 100
und -100.
Offset ist die Einsprungadresse
r die QUERY-Funktion der Bib-
liothek. Ist normalerweise -30
und mu
angegeben werden, damit
alles funktioniert.
Mit Version kann noch eine Ver-
sionsnummer der Bibliothek an-
gegeben werden. Ist die Version
der gefundenen Bibliothek klei-
ner, wird sie nicht akzeptiert.
Ein Beispiel, f
r das nat
lich die rexxreqtools.library
installiert SEIN mu
--------------------------------
IF ~SHOW("L",rexxreqtools.
library) THEN DO
CALL ADDLIB("rexxreqtools
.library", 0, -30, 0)
gadtxt= "_Weiter|_Cancel"
Eingabe = rtgetstring(" "
,"Bitte einen Text eingeben:"
,"Hello World 1.8.",gadtxt)
KnopfGedr
ckt=rtresult
--------------------------------
ADDLIB
LINKNAME
'ADDLIB(Name,Priorit
t[,Offset,Version])
LINKTEXT
]Wenn nun abh
ngig von dem, was
der Benutzer eingeben will, ver-
schiedene Dinge ausgef
hrt werden
sollen, dann kann man daf
r nat
lich lauter einzelne IF...THEN-
Abfragen machen.
Aber was tun, wenn ich 20 solcher
Abfragen habe, und als letztes
will ich eine Aktion f
r alles,
was noch nicht extra abgefragt
wurde?
Also z.B.: Wenn der Benutzer
"ich" eingegeben hat, schreibe
"Hallo Heiko!".
Wenn der Benutzer "Schafkopf"
eingegeben hat, schreibe "Wenz",
usw. Und wenn er gar nichts von
den Sachen eingibt, sondern was
ganz anderes, dann schreibe
"Wie kreativ! :-)"
r gibt es den Befehl
SELECT...END. Das schaut dann
folgenderma
en aus:
--------------------------------
SELECT
WHEN Eingabe="ich" THEN DO
Erfolg=WRITELN(Fenster
,"Hallo Heiko!")
END
WHEN Eingabe=
"Schafkopf" THEN DO
Erfolg=WRITELN(Fenster
,"Wenz!")
END
OTHERWISE DO
Erfolg=WRITELN(Fenster
,"Wie kreativ!")
END
--------------------------------
Die Angabe von OTHERWISE ist
notwendig, sonst gibt's eine
Fehlermeldung!
SELECT
LINKNAME
SELECT
LINKTEXT
re es nicht sch
n, wenn man
sich bei der Erstellung der
Unterprogramme nicht immer darum
mmern m
te, welche Variablen
im Hauptprogramm oder in anderen
Unterprogrammen bereits verwendet
wurden?
re dann z.B. sehr leicht
glich, einzelne Programmteile
in anderen Skripten wiederzuver-
werten, ohne irgend etwas daran
ndern zu m
ssen.
Und nat
rlich ist auch das m
lich. Neben der einfachen Form
von Unterprogrammen, wie sie
unter CALL (3.) beschrieben sind,
gibt es auch noch sogenannte Pro-
cedures, die v
llig unabh
ngig
vom Hauptprogramm arbeiten.
Variablen im Hauptprogramm werden
nicht ver
ndert, au
er man sagt
es ausdr
cklich.
So eine Procedure wird durch den
Befehl PROCEDURE definiert.
Sie endet mit dem Befehl RETURN,
bei dem noch angegeben werden
kann, ob der Wert einer Variable
in RESULT abgelegt werden soll.
--------------------------------
/* Hello World Version 1.7.*/
CALL Fensteroeffnen
CALL FrageundAntwort
Fensteroeffnen:
Erfolg=OPEN(Fenster,'CON:20/20
/620/100/Hello World
1.6./CLOSE',R)
IF ~Erfolg THEN ECHO "Fehler!"
RETURN
FrageundAntwort:
DO WHILE Result~="Ende"
CALL Eingabefrage
CALL Ausgabe
RETURN
Eingabefrage:
Erfolg=WRITELN(Fenster,"Gib
was ein!")
RETURN
Ausgabe: PROCEDURE
Eingabe=READLN(Fenster)
Erfolg=WRITELN(Fenster,"Du
hast "||Eingabe||"
eingegeben.")
RETURN Eingabe
--------------------------------
Die Variable Eingabe existiert
nur noch in der Prozedur Ausgabe!
Versucht einmal herauszufinden,
was diese Variable innerhalb
des Hauptprogramms f
r einen
Wert enth
(Noch nicht benutzte Variablen
enthalten ihren eigenen Namen
in Gro
schrift... nur so als
kleiner Hinweis.)
Hinter PROCEDURE kann man nun
auch noch angeben, welche
Variablen aus dem Hauptprogramm
im Unterprogramm doch bekannt
sein sollen.
Das sieht dann z.B. so aus:
Unterprogramm:
PROCEDURE EXPOSE Variable
Nocheine Unddiedritte
Undsoweiter
PROCEDURE
LINKNAME
PROCEDURE
LINKTEXT
iDer Befehl EXIT beendet ein
ARexx-Skript.
Soll das Skript an das aufrufen-
de Programm einen Wert zur
ckge-
ben, kann man den auch definier-
en, z.B. EXIT 10.
Wenn ein Skript einfach irgendwo
rt und kein Befehl mehr
nachfolgt, sieht der Interpreter
das als EXIT 0 an.
Der R
ckgabewert, der normaler-
weise f
r Fehlermeldungen benutzt
wird, ist dann 0.
LINKNAME
LINKTEXT
kann auf verschiedene Arten
verwendet werden:
1. Aufruf einer ARexx-Funktion.
Das Ergebnis wird in RESULT
abgelegt
--------------------------------
CALL OPEN(Dateiname usw.)
ECHO RESULT
--------------------------------
ist gleichbedeutend mit
--------------------------------
Ergebnis=OPEN(Dateiname usw.)
ECHO Ergebnis
--------------------------------
2. Aufruf externer ARexx-
Programme
Andere ARexx-Programme k
nnen
mit CALL "rexx:MeinProg.rexx"
gestartet werden.
3. Mit CALL kann in ein
Unterprogramm verzweigt werden.
Die Unterprogramme werden alle
mit Namen versehen. Dieser
Name wird einfach in die erste
Zeile einer Unterroutine
geschrieben und ein Doppelpunkt
angeh
ngt. Die letzte Zeile der
Unterroutine enth
lt dann ein
RETURN (Kehre zur
ck). Nochmal
ein Beispiel mit "HelloWorld"
llig?
--------------------------------
/* Hello World Version 1.6.*/
CALL Fensteroeffnen
CALL FrageundAntwort
Fensteroeffnen:
Erfolg=OPEN(Fenster
,'CON:20/20/620/100/Hello World
1.6./CLOSE',R)
IF ~Erfolg THEN ECHO "Fehler!"
RETURN
FrageundAntwort:
DO WHILE Eingabe~="Ende"
Erfolg=WRITELN(Fenster
,"Gib was ein!")
Eingabe=READLN(Fenster)
Erfolg=WRITELN(Fenster
,"Du hast "||Eingabe||
" eingegeben.")
RETURN
--------------------------------
LINKNAME
CALL
LINKTEXT
Um festzustellen, ob ein ARexx
Port wirklich existiert, ob z.B.
YAM bereits gestartet ist,
tigt man den Befehl SHOW().
SHOW(Option[,Name,Trennzeichen])
Option mu
angegeben werden.
Es gibt die folgenden
glichkeiten:
Clip : Alle Eintr
ge in
der Clip-Liste
Files : Eine Liste der
offenen logischen
Dateinamen
Internal : Die interne Port-
Liste
Libraries : die ge
ffneten
Bibliotheken
Ports : die allgemeinen
PublicMessagePorts,
zu denen auch die
ARexx-Ports geh
Es reicht jeweils die Angabe des
ersten Buchstabens.
Wird ein Name angegeben, dann
ndert SHOW() seine Funktion.
Es gibt 1 zur
ck, wenn der
unter Name angegebene Port
gefunden wurde, und 0, wenn er
nicht gefunden wurde.
Also:
--------------------------------
YAM-Existiert=SHOW("P",YAM)
--------------------------------
Die dritte M
glichkeit ist die,
ein beliebiges Trennzeichen f
die Liste anzugeben.
Am sinnvollsten ist ein
"Wagenr
cklauf", was der Return
Taste entspricht.
Er hat den ASCII-Code 10 und
wird angegeben als D2C(10)
--------------------------------
ECHO SHOW("P",,D2C(10))
--------------------------------
LINKNAME
show(option,name,trennzeichen)
LINKTEXT
Um ARexx mitzuteilen, welches
Programm angesteuert werden soll,
tigt man den Befehl ADDRESS.
Die ARexx-Adresse (ARexx-Port),
die dann folgen mu
, entnimmt
man der Dokumentation des jeweil-
igen Programms.
Z.B.:
ADDRESS YAM
ADDRESS Wordworth.1
ADDRESS TCALC
ADDRESS GOLDED.1
Eine Liste der vorhandenen
Ports erh
lt man mit
ECHO SHOW("PORTS")
Nach dem Befehl ADDRESS YAM
werden alle Anweisungen, die
ARexx nicht versteht, an die
YAM-Schnittstelle weitergeleitet.
Wenn nun YAM zuf
llig einen
Befehl haben sollte, der auch
als ARexx-Befehl existiert,
t man ihn in Anf
hrungszeichen
setzen, damit er nicht von ARexx
selbst interpretiert wird.
ADDRESS COMMAND
hat eine besondere Bedeutung:
Damit k
nnen Shell-Befehle
aufgerufen werden.
--------------------------------
ADDRESS COMMAND DIR
--------------------------------
listet das aktuelle Verzeichnis
--------------------------------
ADDRESS COMMAND
--------------------------------
hat prinzipiell die gleiche
Bedeutung. Im ersten Fall
wird aber nur eben schnell
der Befehl DIR an COMMAND
bergeben, im zweiten Fall
wird die Schnittstelle als
COMMAND definiert und alle
weiteren Befehle an COMMAND
geschickt.
Also: Ich habe ein Programm,
mit dem ich z.B. YAM steuere.
Zwischendurch ben
tige ich einen
einzigen COMMAND-Befehl. Dann
schreibe ich ihn direkt hinter
ADDRESS COMMAND, und alle
folgenden Befehle gehen
wieder an YAM.
-------------------------------
ADDRESS YAM
(Befehle an YAM)
ADDRESS COMMAND DIR
(BEFEHLE GEHEN AN YAM)
ADDRESS COMMAND
(Befehle gehen an COMMAND)
ADDRESS kann auch noch ein
paar Parameter mit auf den
Weg bekommen:
ADDRESS VALUE Variable
interpretiert Variable als
solche und nimmt den Inhalt
der Variablen als neuen
ARexx-Port. Z.B.:
--------------------------------
Var="YAM"
ADDRESS VALUE Var
--------------------------------
Alle Befehle gehen an YAM.
ADDRESS ohne weitere Angaben
schaltet auf den vorhergehenden
ARexx-Port zur
ADDRESS
LINKNAME
#Address[{symbol|string}] [ausdruck]